﻿using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using DesignPatternToolkit.Core;

namespace DesignPatternToolkit.Patterns.State
{
    public class StateConfiguration : PatternConfiguration
    {
        /// <summary>
        /// Provide the name of the class that should act as the context
        /// </summary>
        [Category("State - Context"),
        Description("Provides the name of the class that should act as the context."),
        DisplayName("Context class name"), 
        DefaultValue("ContextClass")]
        public string ContextClass { get; set; }

        /// <summary>
        /// Provide the name of the abstract class that should act as a base class for all state classes.
        /// </summary>
        [Category("State - Design"),
        Description("Provide the name of the abstract class that should act as a base class for all state classes."),
        DisplayName("Abstract state class name"),
        DefaultValue("AbstractState")]
        public string AbstractStateClass { get; set; }

        /// <summary>
        /// Provide the name of the actual classes.
        /// </summary>
        [Category("State - Implementation"),
        Description("Provide the name of the actual classes."),
        DisplayName("Concrete state classes")]
        public string[] ConcreteStates { get; set; }

        /// <summary>
        /// The name of the method within all state classes.
        /// </summary>
        [Category("State - Design"),
        Description("Provide the name of the abstract method within all state classes."),
        DisplayName("Abstract method name"),
        DefaultValue("AbstractMethod")]
        public string AbstractMethod { get; set; }

        /// <summary>
        /// Provides the name of the method within the context class.
        /// </summary>
        [Category("State - Context"),
        Description("Provide the name of the method within the context class."),
        DisplayName("Context method name"),
        DefaultValue("ContextMethod")]
        public string ContextRequestMethod { get; set; }
    }
}
